home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / oper_sys / emerald / emrldsys.lha / Language / Compiler / Builtins / real_String.m < prev    next >
Text File  |  1990-08-16  |  3KB  |  98 lines

  1. % @(#)real_String.m    1.3  3/16/88
  2. %
  3. import _RISCObject from "Builtins"
  4. export _StringObject to "Builtins"
  5.  
  6. const _StringObject == immutable object _StringObject
  7.   export getSignature, create, literal
  8.  
  9.   const StringType == immutable type StringType
  10.     function getElement [index : Integer] -> [e : Character]
  11.     function getSlice [lb : Integer, length : Integer] -> [a : String]
  12.     function || [o : String] -> [r : String]
  13.       % r <- self || o
  14.     function asString -> [r : String]
  15.       % r <- self
  16.     function > [o : String] -> [r : Boolean]
  17.       % r <- self > o
  18.     function >= [o : String] -> [r : Boolean]
  19.       % r <- self >= o
  20.     function < [o : String] -> [r : Boolean]
  21.       % r <- self < o
  22.     function <= [o : String] -> [r : Boolean]
  23.       % r <- self <= o
  24.     function = [o : String] -> [r : Boolean]
  25.       % r <- self = o
  26.     function != [o : String] -> [r : Boolean]
  27.       % r <- self != o
  28.     function length -> [ r : Integer ]
  29.     operation lowlevelsleazysetelement [Integer, Character]
  30.   end StringType
  31.   function getSignature -> [result : Signature]
  32.     result <- StringType
  33.   end getSignature
  34.   
  35.   function literal [rep : _RISCObject, offset : Integer, length : Integer] 
  36.     -> [result : StringType]
  37.     var strindex, repindex, limit : Integer
  38.     if rep.lowerbound + offset + length > rep.upperbound + 1 then
  39.       returnandfail
  40.     end if
  41.     result <- String.create[length]
  42.     strindex <- 0
  43.     repindex <- rep.lowerbound + offset
  44.     
  45.     limit <- length
  46.     loop
  47.       exit when strindex >= limit
  48.       result.lowlevelsleazysetelement[strindex, rep(repindex)]
  49.       strindex <- strindex + 1
  50.       repindex <- repindex + 1
  51.     end loop
  52.   end literal
  53.   operation create[length : Integer] -> [result : StringType]
  54.     result <- immutable object aString
  55.       export getElement, getSlice, ||, asString, >, >=, <, <=, =, !=, length,
  56.     lowlevelsleazysetelement
  57.  
  58.       function getElement [index : Integer] -> [e : Character]
  59.     primitive 011 [e] <- [index]
  60.       end getElement
  61.       function getSlice [lb : Integer, length : Integer] -> [a : String]
  62.     primitive 111 [a] <- [lb, length]
  63.       end getSlice
  64.       function || [o : String] -> [r : String]
  65.     primitive 211 [r] <- [o]
  66.       end ||
  67.       function asString -> [r : String]
  68.     primitive 311 [r] <- []
  69.       end asString
  70.       function > [o : String] -> [r : Boolean]
  71.     primitive 411 [r] <- [o]
  72.       end >
  73.       function >= [o : String] -> [r : Boolean]
  74.     primitive 511 [r] <- [o]
  75.       end >=
  76.       function < [o : String] -> [r : Boolean]
  77.     primitive 611 [r] <- [o]
  78.       end <
  79.       function <= [o : String] -> [r : Boolean]
  80.     primitive 711 [r] <- [o]
  81.       end <=
  82.       function = [o : String] -> [r : Boolean]
  83.     primitive 811 [r] <- [o]
  84.       end =
  85.       function != [o : String] -> [r : Boolean]
  86.     primitive 911 [r] <- [o]
  87.       end !=
  88.       function length -> [ r : Integer ]
  89.     primitive 1011 [r] <- []
  90.       end length
  91.       operation lowlevelsleazysetelement [i : Integer, c : Character]
  92.     primitive 1111 [] <- [i, c]
  93.       end lowlevelsleazysetelement
  94.     end aString
  95.   end create
  96. end _StringObject
  97.